package widok;


import kontroler.Presenter;
import model.Pracownik;
import model.WorkerTableModel;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.*;
import java.util.ArrayList;

/**
 * Autor: Robert Wołos
 * Date: 15.08.13
 */

public class Okienko extends JFrame {
    public static final String FILE_NAME = "dane.dat"; // rozszezenie .dat słuzy do przechowywania odbiektow do plikow

    private SrodkowyPanel srodkowyPanel;

    public Okienko() {
        ustawOkno();
        dodajKomponenty();
    }

    public void ustawOkno() {
        setSize(400, 600);
        //setLocation(new Point(300,500));    //ustawia lokalizacje na konkretny punkt
        setLocationRelativeTo(null);         //wysrodkowanie
        setTitle("Baza danych pracownikow ");

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            JOptionPane.showMessageDialog( // wywołanie metody statycznej która można wywołać  w kazdej klasy
                    null,
                    "Wytąpił bląd przy zmianie wygladu",
                    "Blad",
                    JOptionPane.ERROR_MESSAGE);
        }

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                try {
                    FileOutputStream fos = new FileOutputStream(FILE_NAME);
                    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fos);
                    ObjectOutputStream objectOutputStream = new ObjectOutputStream(bufferedOutputStream);

                    JTable tabelaZPracownikami = srodkowyPanel.getTabelaPracownikow();
                    WorkerTableModel tableModel = (WorkerTableModel) tabelaZPracownikami.getModel();
                    ArrayList<Pracownik> listaWierszyZPracownikami = tableModel.getListaWierszyZPracownikami();
                    objectOutputStream.writeObject(listaWierszyZPracownikami);

                    objectOutputStream.close();
                } catch (Exception e2) {
                    JOptionPane.showMessageDialog(
                            null,
                            "Blad przy zapisywaniu do pliku,",
                            "Informacja",
                            JOptionPane.INFORMATION_MESSAGE
                    );
                }
            }

            @Override
            public void windowOpened(WindowEvent e) {
                try {
                    FileInputStream fis = new FileInputStream(FILE_NAME);
                    BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
                    ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream);

                    JTable tabelaZPracownikami = srodkowyPanel.getTabelaPracownikow();
                    WorkerTableModel tableModel = (WorkerTableModel) tabelaZPracownikami.getModel();

                    ArrayList<Pracownik> listaWierszayZPracownikami = (ArrayList<Pracownik>) objectInputStream.readObject();
                    tableModel.setListaWierszyZPracownikami(listaWierszayZPracownikami);
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(
                            null,
                            "Blad przy odczytywaniu z pliku,",
                            "Informacja",
                            JOptionPane.INFORMATION_MESSAGE
                    );
                }
            }
        });

    }

    public void dodajKomponenty() {
        GornyPanel gornyPanel = new GornyPanel();
        srodkowyPanel = new SrodkowyPanel();
        DolnyPanel dolnyPanel = new DolnyPanel();

        add(gornyPanel, BorderLayout.NORTH);
        add(srodkowyPanel, BorderLayout.CENTER);
        add(dolnyPanel, BorderLayout.SOUTH);

        Presenter presenter = new Presenter();
        presenter.setImieTF(gornyPanel.getimieTF());
        presenter.setNazwiskoTF(gornyPanel.getNazwiskoTF());
        presenter.setDataUrodzeniaChooser(gornyPanel.getDataUrodzeniaChooser());
        presenter.setZapiszBtn(gornyPanel.getZapiszBtn());
        presenter.setTabelaPracownikow(srodkowyPanel.getTabelaPracownikow());
        presenter.setUsunAllBtn(dolnyPanel.getusunAllBtn());
        presenter.setUsunBtn(dolnyPanel.getUsunBtn());


    }
}
